<?php

// 显示所有错误，便于开发调试
error_reporting(E_ALL);
ini_set('display_errors', '1');

session_start();

// **新增**: 模拟数据库初始化
// 在真实应用中，这些数据应该来自数据库。
if (!isset($_SESSION['users'])) { $_SESSION['users'] = []; }
if (!isset($_SESSION['tweets'])) { $_SESSION['tweets'] = []; }
if (!isset($_SESSION['follows'])) { $_SESSION['follows'] = []; }
if (!isset($_SESSION['notifications'])) { $_SESSION['notifications'] = []; }
if (!isset($_SESSION['next_user_id'])) { $_SESSION['next_user_id'] = 1; }
if (!isset($_SESSION['next_tweet_id'])) { $_SESSION['next_tweet_id'] = 1; }
if (!isset($_SESSION['next_notification_id'])) { $_SESSION['next_notification_id'] = 1; }


// 定义根目录
define('ROOT_PATH', dirname(__DIR__) . DIRECTORY_SEPARATOR);

// 自动加载
spl_autoload_register(function ($class) {
    // 将命名空间转换为路径，例如 core\App -> core/App.php
    $file = ROOT_PATH . str_replace('\\', '/', $class) . '.php';
    if (file_exists($file)) {
        require $file;
    }
});

// 加载配置
$config = require ROOT_PATH . 'config/app.php';

// **新增**: 加载并注册所有事件监听器
$events = require ROOT_PATH . 'config/events.php';
foreach ($events as $event => $listeners) {
    foreach ($listeners as $listener) {
        \core\Event::listen($event, $listener);
    }
}

// 实例化并运行应用
$app = new core\App($config);
$app->run();
